package bootstrap

import (
	"fmt"
	"last/pkg/database"
	"log"
	"time"

	"github.com/spf13/viper"
	"gorm.io/driver/mysql"

	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

func SetupDB() {
	var dbConfig gorm.Dialector
	viper.SetConfigName("config")
	viper.SetConfigType("toml")
	viper.AddConfigPath(".")
	err := viper.ReadInConfig()
	if err != nil {
		log.Fatal("read config failed: %v", err)
		return
	}

	dsn := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v?charset=%v&parseTime=True&multiStatements=true&loc=Local",
		viper.Get("mysql.username"),
		viper.Get("mysql.password"),
		viper.Get("mysql.host"),
		viper.Get("mysql.port"),
		viper.Get("mysql.database"),
		viper.Get("mysql.charset"),
	)
	dbConfig = mysql.New(mysql.Config{
		DSN: dsn,
	})

	// 连接数据库，并设置 GORM 的日志模式
	database.Connect(dbConfig, logger.Default.LogMode(logger.Info))
	// 设置最大连接数
	database.SQLDB.SetMaxOpenConns(100)
	// 设置最大空闲连接数
	database.SQLDB.SetMaxIdleConns(25)
	// 设置每个链接的过期时间
	database.SQLDB.SetConnMaxLifetime(time.Duration(300) * time.Second)

}
